#ifndef WINBUFADT_H_
#define WINBUFADT_H_

/* ADT mentiroso */

typedef struct winbufCDT * winbufADT;

#define PROMPT_WIN 0
#define MSGS_WIN 1
#define USERS_WIN 2
#define NO_ENTER 0
#define ENTER 1

/* Recibe en t_size el tamanio maximo que se desea que tenga  el buffer
 * Recibe en p_height la altura de la ventana en pantalla
 * Recibe en p_width el ancho de la ventana en pantalla */
winbufADT NewWB (int t_size);

/* Devuelve en su nombre un caracter recibido de la entrada estandar */
int getWBCh(winbufADT wb);

/* Inserta el caracter ch en el buffer.
 * Realiza controles de borde y scrolls necesarios */
int putWBChar (winbufADT wb, int ch, int win_type);

int putWBStr (winbufADT wb, char * str, int win_type, int opt);

/* Similar a getWB pero ademas borra el buffer.
 * Cuando el cliente recibe un ENTER puede llamar a esta funcion,
 * obtiene asi el mensaje y resetea el buffer */
char * getAndEraseWB (winbufADT wb, int * size);

void WBColorOn (winbufADT wb, int group, int opt);

void WBColorOff (winbufADT wb, int group, int opt);

void WBRowRest (winbufADT wb);

/* Libera la memoria */
void FreeWB(winbufADT wb);

#endif /*WINBUFADT_H_*/
